/// 通常一个操作的时间无法非常精确，而它如果在一定的时间范围内，那么就算是那个时间了
/// 这个文件的目标就是为了解决时间测试中精确度的问题
///
/// 在定量领域，约定：
/// around代表容忍误差，equal代表必须精确
part of '../test.dart';

/// 通常用于测量误差的都在50毫秒之内，因此它为默认的容差
const Duration durationTolerance = Duration(milliseconds: 50);
const Duration durationOneSecond = Duration(seconds: 1);
const Duration durationOneMinute = Duration(minutes: 1);

/// 主要用于测试
class DURATION {
  @Deprecated("好像用处不大")
  static const Duration tolerance = Duration(milliseconds: 50);
  @Deprecated("好像用处不大")
  static const Duration short = Duration(milliseconds: 250);
  @Deprecated("好像用处不大")
  static const Duration long = Duration(milliseconds: 1000);
  @Deprecated("好像用处不大")
  static const Duration infinite = Duration(seconds: 2);
}

extension DateTimeCompareKit on DateTime {
  bool isNear(DateTime other, {Duration tolerance = durationTolerance}) {
    // 计算两者误差的绝对值
    final Duration deltaAbs = other.difference(this).abs();
    // 绝对值在容错范围内的话，则返回true，否则返回false
    return deltaAbs < tolerance;
  }
}

extension DurationCompareKit on Duration {
  bool isNear(Duration other, {Duration tolerance = durationTolerance}) {
    // 计算两者之差的绝对值
    final deltaAbs = (other - this).abs();
    // 绝对值在容差范围内，则返回true，否则返回false
    return deltaAbs < tolerance;
  }
}
